package com.me.adventures.characters;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Animation;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.me.adventures.main.AdventuresOfManuel;
import com.me.adventures.main.Constant;
public class Calavera extends PersonajeDelJuegoEnemigo {
public static final int ABAJO = 0;
public static final int IZQUIERDA = 1;
public static final int DERECHA = 2;
public static final int ARRIBA = 3;
private static int MAX = 4;
private int cambio;
private Random rnd;
private Sound sonidoGameOver;
//Atributos para pintar
private TextureRegion [] calaveraMatrizFrames;
private Animation calaveraAnimation;
public Calavera(AdventuresOfManuel adventures, Vector2 posicion, Manuel manuel) {
super(adventures, posicion, manuel);
this.ataqueActivado = false;
this.cambio = 0;
sonidoGameOver = adventures.getManager().get("Musica/Perder.mp3", Sound.class);
rnd = new Random();
direccion = rnd.nextInt(MAX);
Textura = adventures.getManager().get("Enemigos/TablaCalaveraFinal.png", Texture.class);
calaveraMatrizFrames = new TextureRegion[MAX];
calaveraMatrizFrames[0] = new TextureRegion(Textura, 0, 0, Constant.ANCHURA_PERSONAJE, Constant.ALTURA_PERSONAJE);
calaveraMatrizFrames[1] = new TextureRegion(Textura, 58, 0, Constant.ANCHURA_PERSONAJE, Constant.ALTURA_PERSONAJE);
calaveraMatrizFrames[2] = new TextureRegion(Textura, 116, 0, Constant.ANCHURA_PERSONAJE, Constant.ALTURA_PERSONAJE);
calaveraMatrizFrames[3] = new TextureRegion(Textura, 174, 0, Constant.ANCHURA_PERSONAJE, Constant.ALTURA_PERSONAJE);
calaveraAnimation = new Animation(0.05f, calaveraMatrizFrames);
frameActual = calaveraMatrizFrames[0];
}
public void activarAtaque() {
ataqueActivado = true;
}
public void update() {
if(ataqueActivado == true){
boolean colisionDerecha = colisiones.colisionDerechaObjeto(this) || colisiones.colisionDerechaEnemigo(this) || colisiones.colisionMovibleDerecha(this);
boolean colisionIzquierda = colisiones.colisionIzquierdaObjeto(this) || colisiones.colisionIzquierdaEnemigo(this) || colisiones.colisionMovibleIzquierda(this);
boolean colisionArriba = colisiones.colisionArribaObjeto(this) || colisiones.colisionArribaEnemigo(this) || colisiones.colisionMovibleArriba(this);
boolean colisionAbajo = colisiones.colisionAbajoObjeto(this) || colisiones.colisionAbajoEnemigo(this) || colisiones.colisionMovibleAbajo(this);
boolean colisionManuel = colisiones.colisionAbajoConManuel(this) || colisiones.colisionArribaConManuel(this) || colisiones.colisionDerechaConManuel(this) || colisiones.colisionIzquierdaConManuel(this);
if(colisionManuel){
if(adventures.isSonidoActivado())
sonidoGameOver.play();
adventures.gameOver();
}
else{
if(cambio == 0){
cambio(colisionAbajo, colisionArriba, colisionDerecha, colisionIzquierda);
}
if(tiempoParaMovimiento == 0){
if(direccion == ARRIBA){
if(colisionArriba)
cambio(colisionAbajo, colisionArriba, colisionDerecha, colisionIzquierda);
mover();
}
else if(direccion == ABAJO){
if(colisionAbajo)
cambio(colisionAbajo, colisionArriba, colisionDerecha, colisionIzquierda);
mover();
}
else if(direccion == DERECHA){
if(colisionDerecha)
cambio(colisionAbajo, colisionArriba, colisionDerecha, colisionIzquierda);
mover();
}
else{
if(colisionIzquierda)
cambio(colisionAbajo, colisionArriba, colisionDerecha, colisionIzquierda);
mover();
}
}
}
if(tiempoParaMovimiento > 0)
tiempoParaMovimiento--;
}
super.update();
}
private void cambio(boolean colisionAbajo, boolean colisionArriba, boolean colisionDerecha, boolean colisionIzquierda){
List<Integer> direccionesPosibles = new ArrayList<Integer>();
if(direccion == ARRIBA){
if(!colisionArriba)
direccionesPosibles.add(3);
if(!colisionDerecha)
direccionesPosibles.add(2);
if(!colisionIzquierda)
direccionesPosibles.add(1);
if(direccionesPosibles.size() == 0){
if(!colisionAbajo)
direccionesPosibles.add(0);
}
}
else if(direccion == ABAJO){
if(!colisionAbajo)
direccionesPosibles.add(0);
if(!colisionDerecha)
direccionesPosibles.add(2);
if(!colisionIzquierda)
direccionesPosibles.add(1);
if(direccionesPosibles.size() == 0){
if(!colisionArriba)
direccionesPosibles.add(3);
}
}
else if(direccion == DERECHA){
if(!colisionArriba)
direccionesPosibles.add(3);
if(!colisionAbajo)
direccionesPosibles.add(0);
if(!colisionDerecha)
direccionesPosibles.add(2);
if(direccionesPosibles.size() == 0){
if(!colisionIzquierda)
direccionesPosibles.add(1);
}
}
else{
if(!colisionArriba)
direccionesPosibles.add(3);
if(!colisionAbajo)
direccionesPosibles.add(0);
if(!colisionIzquierda)
direccionesPosibles.add(1);
if(direccionesPosibles.size() == 0){
if(!colisionDerecha)
direccionesPosibles.add(2);
}
}
if(direccionesPosibles.size() != 0){
int rand = rnd.nextInt(direccionesPosibles.size());
direccion = direccionesPosibles.get(rand);
}
cambio = 10;
}
private void mover(){
if(direccion == ARRIBA)
moverArriba();
else if(direccion == ABAJO)
moverAbajo();
else if(direccion == DERECHA)
moverDerecha();
else
moverIzquierda();
}
private void moverDerecha(){
posicion.x = (float) (posicion.x + Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = calaveraAnimation.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_CALAVERA;
if(cambio > 0) cambio--;
}
private void moverIzquierda(){
posicion.x = (float) (posicion.x - Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = calaveraAnimation.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_CALAVERA;
if(cambio > 0) cambio--;
}
private void moverArriba(){
posicion.y = (float) (posicion.y + Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = calaveraAnimation.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_CALAVERA;
if(cambio > 0) cambio--;
}
private void moverAbajo(){
posicion.y = (float) (posicion.y - Constant.SPEED);
stateTime = stateTime + Gdx.graphics.getDeltaTime();
frameActual = calaveraAnimation.getKeyFrame(stateTime, true);
tiempoParaMovimiento = Constant.TIEMPO_MOVIMIENTO_CALAVERA;
if(cambio > 0) cambio--;
}
// Getters and Setters ------------------------------------------------------------------------
@Override
public void draw(SpriteBatch batch) {
super.draw(batch);
}
}